package com.dkm.nettysocketdemo.myWebsite.action;

import com.dkm.nettysocketdemo.WebSocket.WebSocketServer;
import com.dkm.nettysocketdemo.myWebsite.domain.HelmetMod;
import com.dkm.nettysocketdemo.myWebsite.domain.HelmetUser;
import com.dkm.nettysocketdemo.myWebsite.service.HelmetModService;
import com.dkm.nettysocketdemo.untils.ClientVo;
import com.dkm.nettysocketdemo.untils.Message;
import com.dkm.nettysocketdemo.untils.jwt.login.UserLoginToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @ClassName : HelmetMod  //类名
 * @Description : 安全帽Action  //描述
 * @Author : 易嵘  //作者
 * @Date: 2021-03-12 10:43  //时间
 */
@RestController
@RequestMapping("HelmetModAction")
public class HelmetModAction {
    /**
     * 安全帽服务接口
     */
   @Resource
    HelmetModService modService;

    /**
     * 后台登陆人
     */
    HelmetUser user;
    /**
     * 查询所有
     *
     * @param clientId 客户id
     * @return 安全帽集合
     */
    @GetMapping("findAll")
    @UserLoginToken
    public Message findAll(@RequestParam("clientId") String clientId) {
        Message msg = new Message();
        msg.setCode(1);
        msg.setData(modService.findAll(clientId));
        msg.setMsg("查询成功");
        return msg;
    }

    /**
     * 安全帽id查询
     *
     * @param helmetId 安全帽id
     * @return 安全帽的对象
     */
    @GetMapping("findById/{helmetId}")
    public Message findById(@PathVariable(value = "helmetId") String helmetId) {
        Message msg = new Message();
        msg.setCode(1);
        msg.setData(modService.findById(helmetId));
        msg.setMsg("查询成功");
        return msg;
    }

    /**
     * 将未绑定的设备id生成二维码
     *
     * @param pkHelmetId 未绑定的设备id
     * @return 未绑定的设备二维码
     */
    @GetMapping("getHelmetQR/{pkHelmetId}")
    public Message getHelmetQR(@PathVariable(value = "pkHelmetId") String pkHelmetId) {
        Message msg = new Message();
        msg.setCode(1);
        msg.setData(modService.getHelmetQR(pkHelmetId));
        msg.setMsg("生成成功");
        return msg;
    }

    /**
     * 客户端绑定终端
     *
     * @param clientId 客户端id
     * @param helmetId 终端id
     * @return 回调函数
     */
    @PutMapping("bindingHelmet")
    public int bindingHelmet(String clientId, String helmetId) {
        return modService.bindingHelmet(clientId, helmetId);
    }

    /**
     * 后台查询所有
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param page      页数
     * @param limit     数量
     * @param helmetMod 安全帽
     * @return 消息
     */
    @GetMapping("/helmetselectAll")
    public Message helmetselectAll(String startTime, String endTime, Integer page, Integer limit, HelmetMod helmetMod) {
        Message message = new Message();
        List<HelmetMod> helmetMods = modService.selectAll(startTime, endTime, page, limit, helmetMod);
        Integer count = modService.rowCount(startTime, endTime, helmetMod);
        for (HelmetMod mod : helmetMods) {
            mod.setOnLine(WebSocketServer.isOnLine(mod.getPkHelmetId()));
        }
        message.setCode(0);
        message.setCount(count);
        message.setData(helmetMods);
        return message;
    }

    /**
     * 将安全帽设置为禁用
     * @param helmetId
     * @return
     */
    @PostMapping("deletById/{helmetId}")
    public Message helmetDeletById(@PathVariable("helmetId") String helmetId) {
        Message message = new Message();
        int update = modService.updateById(helmetId, "0");
        message.setCode(200);
        if (update > 0) {
            message.setCount(update);
            message.setData("操作成功");
            return message;
        } else {
            message.setCount(update);
            message.setData("操作失败");
            return message;
        }
    }

    /**
     * 将安全帽设置为启用
     *
     * @param helmetId 安全帽id
     * @return Message
     */
    @PostMapping("helmetOpen/{helmetId}")
    public Message helmetOpen(@PathVariable("helmetId") String helmetId) {
        Message message = new Message();
        int update = modService.updateById(helmetId, "1");
        message.setCode(200);
        if (update > 0) {
            message.setCount(update);
            message.setData("操作成功");
            return message;
        } else {
            message.setCount(update);
            message.setData("操作失败");
            return message;
        }
    }

    /**
     * 批量禁用
     *
     * @param ids 安全帽id
     * @return Message
     */
    @PostMapping("/helmetDeleteAll")
    public Message helmetDeleteAll(@RequestParam(value = "ids[]", required = false) String[] ids,HttpServletRequest request){
        rowMap(request);
        Message message=new Message();
        List<String> idssi = null;
        //id为空的情况下
        if (ObjectUtils.isEmpty(ids)) {
            message.setMsg("操作失败");
            message.setCode(0);
        } else {
            idssi = Arrays.asList(ids);
        }
        int row = modService.updateAll(idssi,user.getUserName());
        if (row>0){
            message.setMsg("操作成功");
            message.setCode(1);
            message.setCount(row);
        } else {
            message.setMsg("操作失败");
            message.setCode(0);
        }
        return message;
    }

    /**
     * 修改地区
     *
     * @param helmetArea 地区
     * @param helmetId   安全帽id
     * @return 回调函数
     */
    @PutMapping("helmetArea")
    public Message helmetArea(String helmetArea, String helmetId) {
        Message message = new Message();
        HelmetMod mod = new HelmetMod();
        mod.setPkHelmetId(helmetId);
        mod.setHelmetArea(helmetArea);
        message.setData(modService.update(mod));
        message.setMsg("修改成功");
        message.setCode(200);
        return message;
    }

    /**
     * 修改名称
     *
     * @param helmetName 名称
     * @param helmetId   安全帽id
     * @return 回调函数
     */
    @PutMapping("helmetName")
    public Message helmetName(String helmetName, String helmetId) {
        Message message = new Message();
        HelmetMod mod = new HelmetMod();
        mod.setPkHelmetId(helmetId);
        mod.setHelmetName(helmetName);
        message.setData(modService.update(mod));
        message.setMsg("修改成功");
        message.setCode(200);
        return message;
    }

    /**
     * 录音上传
     *
     * @param file 录音文件
     * @return 服务器存储地址
     */
    @PostMapping("audioFile")
    public Message audioFile(@RequestBody MultipartFile file) {
        Message message = new Message();
        message.setData(modService.audioFile(file));
        message.setMsg("发送成功");
        message.setCode(200);
        return message;
    }

    /**
     * 修改分组
     *
     * @param groupId  分组id
     * @param helmetId 安全帽id
     * @return 回调函数
     */
    @PutMapping("helmetGroup")
    public Message helmetGroup(String groupId, String helmetId) {
        Message message = new Message();
        HelmetMod mod = new HelmetMod();
        mod.setPkHelmetId(helmetId);
        mod.setGroupId(groupId);
        message.setData(modService.update(mod));
        message.setMsg("修改成功");
        message.setCode(200);
        return message;
    }

    /**
     * 查询所有没有客户绑定的安全帽
     * @return
     */
    @GetMapping("findNullMod")
    public List<ClientVo> findAlls(){
            List<HelmetMod> mods=modService.findByNull();
            List<ClientVo> list = new ArrayList<>();
        for (HelmetMod helmetMod : mods) {
            ClientVo clientVo = new ClientVo();
            clientVo.setName(helmetMod.getPkHelmetId());
            clientVo.setValue(helmetMod.getPkHelmetId());
            list.add(clientVo);
        }
        return list;
    }

    /**
     * 根据id查询的安全帽
     * @param clientId
     * @return
     */
    @GetMapping("findByIds/{clientId}")
    public List<ClientVo> findByIds(@PathVariable("clientId") String clientId){
        return modService.findByIds(clientId);
    }
    /**
     * 简化代码
     *
     * @param request 请求
     */
    private void rowMap(HttpServletRequest request) {
        user = (HelmetUser) request.getSession().getAttribute("user");
    }
}
